iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

從0到有學習JavaScript系列 第 6

第三章 型別、值和變數-問題筆記 parseInt

  • 分享至 

  • xImage
  •  

接續昨日寫的文章,今天來探討一下JavaScript中的 parseInt和進位制之間的關係。

問題一、javaScript 中的 parseInt是用來做什麼的?
parseInt 將可以轉成整數的「字串」轉為「整數」,也可以利用它來做進位制的轉換。
例如:

console.log(parseInt("11234happyrrrr"));
//結果為11234,因為這組字串只有11234能被解析為整數
console.log(parseInt("happy11234rrrr"));
//結果為NaN,因為這個字串裡面,第一個字為h,超過進位制範圍,所以停止解析

問題二、parseInt 轉換進位制方式 ?

使用 parseInt(string, radix)

(一)概念一、不提供radix的值:

console.log(parseInt('123'));    // 如果沒給radix,默認將數字轉換十進位
// 結果: 123
console.log (parseInt("0x10")); // 十六進位格式的字串,但省略了 radix 参数
// 結果: 16
console.log(parseInt('077'));
// 轉成數字77,解析為十進位,結果為77
console.log(parseInt('1.9'));
// 因為parseInt解析位自動忽略非數字的小數點(.),直接將小數點省略,結果為 1 
// 所以小數點要使用parseFloat
console.log(parseInt('ff', 16));
// 將ff轉換為16進位,結果為255 
console.log(parseInt('0xFF', 16));
// 轉換為16進位,結果為255,"0x"為16進位前綴詞,意思是parseInt碰到"0x"知道要解析成16進位
console.log(parseInt('xyz'));
// NaN (因為無法轉換為整數)

(二)概念二、提供radix的值:

console.log(parseInt("10", 10)); // radix值為10,使用十進位解析
//结果為10 
console.log(parseInt("10", 16)); // radix值為16, 使用十六進位解析
//结果為 16

(三)概念三、radix是什麼?
radix 的值必须在 2 到 36 之间。
如果超出2-36之間的範圍,parseInt 後結果為 NaN(Not a Number)。

console.log(parseInt("123",37));     //結果: NaN

問題三、進位制的前綴詞為何?

  • 十進位(Decimal):不需要前缀,例如:123。
  • 二進位(Binary):通常以 0b 開頭,例如:0b1010 表示十進位的 10。
  • 八進位(Octal):以 0o0 開頭,例如:0o12012 表示十進位的 10。
  • 十六進位(Hexadecimal):以 0x 開頭,例如:0x1A 表示十進位的 26。

問題四、0開頭的字串在parseInt中屬於哪個進位制?

  • 如果字串以 0x0X 開頭(一個0,後面是小寫或大寫的 X),就會被假定為解析成16進位數字。
  • 八進位(Octal):以 0o0 開頭
    以下為書中程式碼範例:
console.log(parseInt("0x1A")); //小寫x,解析為十六進位: 26
console.log(parseInt("0X1A")); //大寫x,解析為十六進位: 26
console.log(parseInt(0100));
//因為0開頭的數字,直接由0100轉換為8進位,結果為64

console.log(parseInt("0100", 8));
//結果跟上面一樣,因為radix為8,轉換為8進位,結果為64
console.log(parseInt("0100")); 
//默認值解析為十進位制,先將字串0100轉換為數字100,且預設解析為10進位,結果為100

Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt


上一篇
第三章 型別、值和變數-問題筆記 進位制
下一篇
第三章 型別、值和變數-問題筆記 BigInt
系列文
從0到有學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言